

package TagServer::Fornecedor;



#use TagServer::Empresa;
use TagServer::Produto;

use base qw( TagServer::Empresa );



=head1 FORNECEDOR



=cut


=head1 PUBLIC ATTRIBUTES

=pod 



=cut


=head1 PUBLIC METHODS

=head2 Ascessors

=head3 new

   Return : 
	The class instance      

   Description : 
      The constructor

=cut

sub new
{
  warn "Construtor: sou o Fornecedor\n";
  my $this = shift;
  my $class = ref($this) || $this; 
  my $self = $class->SUPER::new();
  my $self = {};
  bless ($self, $class); 
  return $self;
}

=head3 update

   Parameters :
      new_data : %  the new data to put in this object

   Return : % the data in this object
      

   Description : 
      If parameter new_data exists then receive that data
      Commit the $self->data to DBMS

=cut

sub update # FIXME separar os sql, tabelas, etc
{
   warn "Metodo Fornecedor->update\n";
   my $self = shift;
   if (@_) { $self->data(@_) }
   my $ref = $self->data;
   my %data = %$ref;
   
   my $nrows;
   my($nome, $representante, $cnpj , $telefones , $e_mail , $endereco , $website, $contatos);
   my $tabela = 'empresa'; 
   
   # Verificando o id
   my $id = $data{'id'};
 if ($id){
   my $sql = "
   SELECT  `nome` , `representante`, `cnpj` , `telefones` , `e_mail` , `endereco` , `website`, `contatos` 
   FROM `$tabela`  
   WHERE `id` =$id
   ";
   
   warn "Preparando o sql ...\n $sql\n";
   my $sth = $self->dataHandle->prepare($sql);
   $sth->execute();

   # mantem as variaveis para atribuicao posterior
   $sth->bind_columns( undef, \$nome,  \$representante, \$cnpj , \$telefones , \$e_mail , \$endereco , \$website, \$contatos );
   $nrows = $sth->rows;
   $sth->finish();
 }
   # se existe o dado com este id no DBMS entao faz update
 if ($nrows) {
	 warn "Fazendo update de empresa id = $id\n";
	  # se o argumento inclui algo alem de 'id'
	  # faz o update no banco
	  if ($data{'nome'}){
   $sql = "
   UPDATE `$tabela` SET 
   `nome`='".$data{'nome'}."' , 
   `representante`='".$data{'representante'}."' , 
   `cnpj`='".$data{'cnpj'}."'  , 
   `telefones`='".$data{'telefones'}."'  , 
   `e_mail`='".$data{'e_mail'}."'  , 
   `endereco`='".$data{'endereco'}."'  , 
   `website`='".$data{'website'}."'  , 
   `contatos`='".$data{'contatos'}."' 
   WHERE `empresa`.`id` = '$id'
   ";
   warn "$sql\n";
          }else{
	 warn "Pegando dados do banco\n";
   # atribui os dados ao model
   # o usuario solicitou update so com id
   # entao solicita os dados do fornecedor que estao no banco
   # -> atribuir estes valores ao model
   $data{'nome'} = $nome;
   $data{'representante'} = $representante;
   $data{'cnpj'} = $cnpj; 
   $data{'telefones'} = $telefones;
   $data{'e_mail'} = $e_mail;
   $data{'endereco'} = $endereco; 
   $data{'website'} = $website; 
   $data{'contatos'} = $contatos;
   $self->data(\%data);
           }
 } else {  
	 warn "Criando nova empresa\n";
   # se não o usuario deseja inserir um novo fornecedor no banco
    $sql = "INSERT INTO `empresa` ( `nome` , `representante`, `cnpj` , `telefones` , `e_mail` , `endereco` , `website`, `contatos` )
   VALUES (
   '".$data{nome}."' , 
   '".$data{representante}."' , 
   '".$data{cnpj}."' , 
   '".$data{telefones}."' , 
   '".$data{e_mail}."' , 
   '".$data{endereco}."' , 
   '".$data{website}."' , 
   '".$data{contatos}."'
   );"
 }
 warn "$sql\n";
   $self->dataHandle->do( $sql );
   if ($self->observer){$self->notify};
   return $self->{_data};
}



=head3 setProduto

   Parameters :
      umProduto : TagServer::Produto : 

   Return : 
      

   Description : 
      

=cut

sub setProduto
{
  my($self,
     $umProduto, # TagServer::Produto : 
    ) = @_;
#UML_MODELER_BEGIN_PERSONAL_CODE_setProduto
#UML_MODELER_END_PERSONAL_CODE_setProduto
}


=pod 

=head3 getProdutos

   Parameters :

   Return : 
      %

   Description : 
      

=cut

sub getProdutos
{
  my($self    ) = @_;
#UML_MODELER_BEGIN_PERSONAL_CODE_getProdutos
#UML_MODELER_END_PERSONAL_CODE_getProdutos
}




=cut


=head1 METHODS FOR SUBCLASSING



=cut


=head1 PRIVATE METHODS



=cut






return 1;
